/**
 * Copyright (c) Huawei Technologies Co., Ltd. 1987-2021. All rights reserved.
*/

package com.gitee.fufu669.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * TODO
*/
public class CacheDatetimeUtil {

    /**
     * TODO
    */
    public static final Logger logger = LoggerFactory.getLogger(CacheDatetimeUtil.class);

    // TODO
    private static SimpleDateFormat simpleDateFormat;

    // TODO
    private static SimpleDateFormat simpleDateFormatUTC;

    // TODO
    private static SimpleDateFormat simpleDateFormatUTCTimeZone;

    /**
     * TODO
    */
    public static String getTimeStringNow(){
        // 返回
        return getSimpleDateFormat().format(Calendar.getInstance().getTime());
    }

    /**SimpleDateFormat是非线程安全的，所以不能用new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")来初始化成static final的字段.*/
    /**
     * TODO
    */
    public static SimpleDateFormat getSimpleDateFormat(){
        // 判断是否是空
        if(simpleDateFormat==null){
            // 创建
            simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            // 返回
            return simpleDateFormat;
        }
        // 返回
        return simpleDateFormat;
    }

    /**
     * TODO
    */
    public static SimpleDateFormat getSimpleDateFormatUTC(){
        // 判断是否是空
        if(simpleDateFormatUTC==null){
            // 创建
            simpleDateFormatUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
            // 返回
            return simpleDateFormatUTC;
        }
        // 返回
        return simpleDateFormatUTC;
    }

    /**
     * TODO
    */
    public static SimpleDateFormat getSimpleDateFormatUTCTimeZone(){
        // 判断是否是空
        if(simpleDateFormatUTCTimeZone==null){
            // 创建
            simpleDateFormatUTCTimeZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");
            // 返回
            return simpleDateFormatUTCTimeZone;
        }
        // 返回
        return simpleDateFormatUTCTimeZone;
    }

    /**
     * TODO
    */
    public static Date toDate(String oddsTime) {
        // 尝试下面的代码
        try {
            // 返回
            return getSimpleDateFormat().parse(oddsTime);
        // 捕捉异常
        } catch (ParseException e) {
            logger.info(e.getMessage(), e);
            // 返回
            return Calendar.getInstance().getTime();
        }
    }

    /**
     * TODO
    */
    public static Date addSeconds(Date date, int seconds){
        // 拿到日历对象
        Calendar calendar = Calendar.getInstance();
        // TODO
        calendar.setTime(date);
        // 调整日历
        calendar.add(Calendar.SECOND, seconds);
        // 返回
        return calendar.getTime();
    }

    /**
     * TODO
    */
    public static Date addSeconds(int seconds){
        // 拿到日历对象
        Calendar calendar = Calendar.getInstance();
        // 调整日历
        calendar.add(Calendar.SECOND, seconds);
        // 返回
        return calendar.getTime();
    }

    /**
     * TODO
    */
    public static String getTimeString(Calendar calendar){
        // 返回
        return getSimpleDateFormat().format(calendar.getTime());
    }

}
